# -*- coding: utf-8 -*-
# @Author  : haomh
# @Time    : 2025/10/25 10:30
# @Function:
from idlelib.debugobj import myrepr

# 字符串特征：
# 1.一对引号的字符串
name1 = 'Tom'
name2 = 'Rose'

# 三双引号 :支持换行

name3 = '''Tom'''
name4 = """Rose"""
aa = '''i am 
haomeihui'''
# print(aa)

c = "i'm tom"
# 用\转义，提示撇号不是和别人配对的
d = 'i\'m tom'

# 1.2 字符串的输出
# print('hello world')

name = 'Tom'
# print('我的名字是%s'% name)
# 常用方法
# print(f'我的名字是{name}')

# 字符串的输入
# song = input('请输入你最喜欢的歌手,输入‘q’退出')
# while True:
#
#     if song == 'q':
#         break
#     if song != '林俊杰':
#         print('没品')
#         break
#     else:
#         print('漫天风雪我陪你颤抖，我们别回头~')
#         break


# 字符串下标
"""
下标 又叫 索引
语法：
    name[下标]
"""

a = 'hello world'
# 倒数的话从-1开始，整数从0开始

# print(b[7]) # 下标越界


# 字符串切片

'''
步骤：
    1.先找开始和结束的方向
        如果步长是整数，左侧是开始的方向，右侧是结束的方向
        如果步长是负数，右侧是开始的方向，左侧是结束的方向
        注意点：
            开始和结束值，只代表方向，原始数据的下标永远不变
    2.根据开始下标，找到开始位置的元素
    3.根据第一步的判断，确定方向，去结尾的方向找到结束元素，找到就能切出数据，否则切空。
语法：
    序列[开始位置下标：结束位置下标：步长]
    1.不包含几位数位置下标对应的数据，正负数均可
    2.顾头不顾尾
'''
# b="abcdefg" # 倒数的话从-1开始，整数从0开始
# print(b[2:5:1])  #cde
# print(b[2:5])  #cde,步长不写，默认为1
# print(b[:5]) # abcde 起始位置不写，默认从下标0开始
# print(b[1:]) # bcdef结束位置下标不写，直接从起始位置下标取到尾
# print(b[:])  #  都不写，全取
# print(b[::2]) # aceg 从头到尾，步长2取
# print(b[::-1]) # 步长为负数，从后往前取
# print(b[:-1]) # abcdef 只写了结束位置下标
# print(b[2:5:-1])  #切不出，
# print(b[5:2:-1])  # fed
# print(b[3:3]) # 切空，不顾尾优先
#
#
"""
字符串的操作方法
"""
# 查找
# find():检测某个子串是否包含在这个字符串中，如果在，返回这个子串开始的位置下标
lyric = '交换人生也许忘了第几梦那时我们身处第几号时空如果我们手心紧握结局一样不动'
print(lyric.find('交换人生'))
# 如果找不到返回-1
print(lyric.find('不动', 10, 20))
print(lyric.find('修炼爱情'))
print('交换人生')

# lyric.index('修炼爱情') # 如果找不到就报错

print(lyric.count('梦'))

# 修改
# 1.repalce() 替换
str1 = '交换 余生 交换 余生'
# 字符串是不可变数据类型，
print(str1.replace('余生', '爱情', 1))

# 分隔：split(分隔字符，num)：num是分隔次数，得到的元素是num+1个
print(str1.split('余生'))  # 分隔后返回的是列表
print(str1.split(' '))  # 按照空格分隔

#  join
list1 = ['1', '2', '3']
t1 = ['1', '2', '3']
print('_'.join(list1))
print('_'.join(t1))

# capitalize() 将字符串第一个字符转成大写，其他有大写，转成小写
# title() 将字符串每个单词首字符转换成大写
# low() 将字符串中大写转小写
# upper() 将字符串中小写转大写

lyric.capitalize()
"""
数据按照是够能直接修改氛围可变数据类型和不可变数据类型。
"""

mystr = 'hello world and supertest and chenghao and Python  '

# 删除字符串最左侧空白字符
print(mystr.lstrip())
# 删除右侧空白字符
print(mystr.rstrip())
# 删除左右两侧的
print(mystr.strip())

# ljust():返回一个原字符串左对齐，并使用指定字符（默认空格）填充至对应长度的新字符串

mystr1 = 'hello'
print(mystr1.ljust(10, '.'))
print(mystr1.ljust(10))  # 填充的字符不写，默认空格

print(mystr1.rjust(10, '.'))
print(mystr1.rjust(10))

print(mystr1.center(10,'.'))
print(mystr1.center(10))


# 判断
'''
is
'''
print(mystr.startswith('hello')) # 判断是不是以hello开始
print(mystr.endswith('world',5,10))  # 指定索引中是不是以world开始

# 严格区分大小写
print(mystr.endswith('Python '))
print(mystr.endswith('python '))
print(mystr.endswith('Python ',5,10))

#是否是纯字母
print(mystr.isalpha())

# 是否是纯数字
print(mystr.isdigit())

# 是否既有字母又有数字
print(mystr.isalnum())

# 是否只是空格
numStr1='1 2 3 4 5'
numStr2=' '
print(numStr1.isspace())
print(numStr2.isspace())


